--- /dev/null
+/*
+
+ Support for G7ToWin data files (.g7t),
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+
+/*
+ History:
+ 04/07/2007: start programming
+*/
+
+#include "defs.h"
+#include "csv_util.h"
+#include "garmin_fs.h"
+#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+#include "strptime.h"
+
+#include <time.h>
+
+#if CSVFMTS_ENABLED
+
+#define MYNAME "g7towin"
+
+#define G7T_HEADER "Version 2:G7T"
+
+static gbfile *fin;
+static grid_type grid;
+static int datum;
+static gpsdata_type mode;
+static double altf;
+static int gardown;
+static int event_ct;
+
+static
+arglist_t g7towin_args[] = {
+ ARG_TERMINATOR
+};
+
+#define WAYPT__OFS 0x00000
+#define TRKPT__OFS 0x01000
+
+#define WPT_c0_OFS 0x0c000
+#define WPT_c1_OFS 0x0c100
+#define WPT_c2_OFS 0x0c200
+#define WPT_c3_OFS 0x0c300
+#define WPT_c4_OFS 0x0c400
+#define WPT_c5_OFS 0x0c500
+#define WPT_c6_OFS 0x0c600
+#define WPT_c7_OFS 0x0c700
+#define WPT_c8_OFS 0x0c800
+#define WPT_cA_OFS 0x0cA00
+#define WPT_cB_OFS 0x0cB00
+#define WPT_cC_OFS 0x0cC00
+#define WPT_cD_OFS 0x0cD00
+
+static void
+parse_line(char *buff, int index, const char *delimiter, waypoint *wpt)
+{
+ char *cin;
+ garmin_fs_p gmsd = GMSD_FIND(wpt);
+
+ while ((cin = csv_lineparse(buff, delimiter, "", index++))) {
+
+ buff = NULL;
+ cin = lrtrim(cin);
+
+ if ((*cin == '\0') ||
+ (strcmp(cin, "INF") == 0) ||
+ (strcmp(cin, "1e25") == 0) ||
+ (strcmp(cin, "1.0e25") == 0)) continue;
+
+ switch(index) {
+
+ int categories, dyn;
+ struct tm tm;
+ char *cerr;
+
+ case TRKPT__OFS + 1:
+ cin += parse_coordinates(cin, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ while (isspace(*cin)) cin++;
+
+ memset(&tm, 0, sizeof(tm));
+ cerr = strptime(cin, "%a %b %d %H:%M:%S %Y", &tm);
+ if (cerr == NULL) {
+ fatal(MYNAME ": Unable to convert date (%s)!\n", cin);
+ }
+ wpt->creation_time = mkgmtime(&tm);
+ break;
+
+ case WAYPT__OFS + 1:
+ wpt->description = xstrdup(cin);
+ break;
+
+ case WAYPT__OFS + 2:
+ wpt->icon_descr = gt_find_desc_from_icon_number(
+ atoi(cin), PCX, &dyn);
+ wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+ break;
+
+ case WAYPT__OFS + 4:
+ if (strcmp(cin, "S+C") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol_and_comment);
+ }
+ else if (strcmp(cin, "S") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol);
+ }
+ else if (strcmp(cin, "S+N") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol_and_name);
+ }
+ break;
+
+ case WPT_cA_OFS + 1:
+ case WPT_c1_OFS + 1:
+ if (wpt->shortname) xfree(wpt->shortname);
+ wpt->shortname = xstrdup(cin);
+ break;
+
+ case WPT_cA_OFS + 4:
+ case WPT_c4_OFS + 2:
+ GMSD_SETSTR(city, cin);
+ break;
+
+ case WPT_cA_OFS + 5:
+ case WPT_c4_OFS + 3:
+ GMSD_SETSTR(state, cin);
+ break;
+
+ case WPT_cA_OFS + 6:
+ case WPT_c4_OFS + 4:
+ GMSD_SETSTR(cc, cin);
+ break;
+
+ case WPT_cB_OFS + 1:
+ case WPT_c6_OFS + 2:
+ GMSD_SETSTR(facility, cin);
+ break;
+
+ case WPT_cB_OFS + 2:
+ case WPT_c6_OFS + 3:
+ GMSD_SETSTR(addr, cin);
+ break;
+
+ case WPT_cB_OFS + 3: /*cross road */
+ case WPT_c6_OFS + 4:
+ GMSD_SETSTR(cross_road, cin);
+ break;
+
+ case TRKPT__OFS + 2: /* altitude */
+ case WPT_cC_OFS + 1:
+ case WPT_c5_OFS + 1:
+ case WPT_c8_OFS + 1:
+ wpt->altitude = altf * atof(cin);
+ break;
+
+ case TRKPT__OFS + 3: /* depth */
+ case WPT_cC_OFS + 2:
+ case WPT_c5_OFS + 2:
+ case WPT_c8_OFS + 2:
+ GMSD_SET(depth, altf * atof(cin));
+ break;
+
+ case TRKPT__OFS + 10: /* temperature */
+ if (*cin == '|') cin++; /* in track points */
+ if (strcmp(cin, "1e25") == 0) break;
+ if (strcmp(cin, "1.0e25") == 0) break;
+ /* !!! NO BREAK !!! */
+ case WPT_cD_OFS + 1:
+ case WPT_cB_OFS + 6:
+ GMSD_SET(temperature, atof(cin));
+ break;
+
+ case WAYPT__OFS + 6: /* proximity */
+ case WPT_cD_OFS + 2:
+ GMSD_SET(proximity, atof(cin));
+ break;
+
+ case WPT_cB_OFS + 5:
+ case WPT_cD_OFS + 3:
+ categories = atoi(cin);
+ if (categories != 0)
+ GMSD_SET(category, atoi(cin));
+ break;
+
+#if 0
+
+/* currently unused */
+
+ case TRKPT__OFS + 5: /* distance from previous point */
+ case TRKPT__OFS + 6: /* distance from segment start */
+ case TRKPT__OFS + 7: /* distance from start */
+ case TRKPT__OFS + 8: /* velocity from previous point */
+ case TRKPT__OFS + 9: /* time (in seconds) from previous point */
+ break;
+
+ case WAYPT__OFS + 3: /* ignore color */
+ break;
+
+ case WAYPT__OFS + 5: /* always '0' */
+ break;
+
+ case TRKPT__OFS + 4:
+ if (case_ignore_strcmp(cin, "FT") == 0) ;
+ else if (case_ignore_strcmp(cin, "M") == 0) ;
+ else if (case_ignore_strcmp(cin, "SM") == 0) ;
+ else if (case_ignore_strcmp(cin, "NM") == 0) ;
+ else if (case_ignore_strcmp(cin, "KM") == 0) ;
+ break;
+
+ case WPT_cB_OFS + 4: /* unknown (datatype) */
+ break;
+
+ case WPT_cC_OFS + 3: /* waypt_class (always FF) */
+ break;
+
+ case WPT_cC_OFS + 4: /* class & subclass */
+ case WPT_cC_OFS + 5:
+ case WPT_cC_OFS + 6:
+ case WPT_cC_OFS + 7:
+ case WPT_cC_OFS + 8:
+ case WPT_cC_OFS + 9:
+ case WPT_cC_OFS + 10:
+ case WPT_cC_OFS + 11:
+ case WPT_cC_OFS + 12:
+ case WPT_cC_OFS + 13:
+ case WPT_cC_OFS + 14:
+ case WPT_cC_OFS + 15:
+ case WPT_cC_OFS + 16:
+ case WPT_cC_OFS + 17:
+ case WPT_cC_OFS + 18:
+ case WPT_cC_OFS + 19:
+ case WPT_cC_OFS + 20:
+ case WPT_cC_OFS + 21:
+ break;
+
+ case WPT_cC_OFS + 22:
+ /* distance */
+ break;
+#endif
+ }
+ }
+}
+
+static waypoint *
+parse_waypt(char *buff)
+{
+ char *cin, *cerr;
+ int i;
+ struct tm tm;
+ waypoint *wpt;
+ garmin_fs_p gmsd;
+
+ wpt = waypt_new();
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+
+ if (gardown)
+ cin = buff + 6;
+ else
+ cin = buff + 15;
+
+ while (isspace(*cin)) cin--;
+ if (cin >= buff)
+ wpt->shortname = xstrndup(buff, cin - buff + 1);
+
+ if (gardown)
+ buff += 7;
+ else
+ buff += 16;
+
+ buff += parse_coordinates(buff, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ while (isspace(*buff)) buff++;
+
+ memset(&tm, 0, sizeof(tm));
+ cerr = strptime(buff, "%a %b %d %H:%M:%S %Y", &tm);
+ if (cerr == NULL)
+ fatal(MYNAME ": Unable to convert date (%s)!\n", buff);
+ wpt->creation_time = mkgmtime(&tm);
+
+ /* go over time stamp */
+ i = 5;
+ while (buff && i) {
+ i--;
+ buff = strchr(buff, ' ');
+ if (buff) buff++;
+ }
+ if (gardown && (buff == NULL)) return wpt;
+ is_fatal((buff == NULL), MYNAME ": Incomplete waypoint line!");
+
+ while (isspace(*buff)) buff++;
+
+ parse_line(buff, WAYPT__OFS, "^", wpt);
+
+ return wpt;
+}
+
+static waypoint *
+parse_trkpt(char *buff)
+{
+ garmin_fs_p gmsd;
+ waypoint *wpt;
+
+ wpt = waypt_new();
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+
+ parse_line(buff, TRKPT__OFS, ";", wpt);
+
+ return wpt;
+}
+
+/*
+ * parse_categories is currently only a dummy procedure.
+ * w'll need a central storage with binding to the module
+ * which has established a list of category names.
+ */
+
+static void
+parse_categories(char *buff)
+{
+ char *cin;
+ int cat = 0;
+
+ while ((cin = csv_lineparse(buff, ",", "", cat++))) {
+ gbuint16 cx;
+
+ buff = NULL;
+
+ cin = lrtrim(cin);
+ if (*cin == 0) continue;
+
+ garmin_fs_convert_category(cin, &cx);
+ }
+}
+
+
+/* main functions */
+
+static void
+rd_init(const char *fname)
+{
+ fin = gbfopen(fname, "rb", MYNAME);
+
+ gardown = 1;
+ mode = wptdata;
+ grid = grid_lat_lon_dmm;
+ datum = DATUM_WGS84;
+ altf = 1;
+ event_ct = 0;
+}
+
+static void
+rd_deinit(void)
+{
+ gbfclose(fin);
+}
+
+static void
+data_read(void)
+{
+ char *buff;
+ int line = 0;
+ waypoint *wpt = NULL;
+ waypoint *prev = NULL;
+ route_head *head = NULL;
+
+ while ((buff = gbfgetstr(fin))) {
+ char *cin = buff;
+ char *cdata;
+
+ line++;
+
+ cin = lrtrim(buff);
+ if (!*cin) continue;
+
+ cdata = cin+1;
+ while (! isspace(*cdata)) cdata++;
+ while (isspace(*cdata)) cdata++;
+ if (! *cdata) continue;
+
+ switch(*cin) {
+
+ case '#': /* comment */
+ break;
+
+ case 'A':
+ if (case_ignore_strncmp(cdata, "Meter", 5) == 0)
+ altf = 1.0;
+ else if (case_ignore_strncmp(cdata, "Feet", 4) == 0)
+ altf = FEET_TO_METERS(1.0);
+ break;
+
+ case 'C': /* categories */
+ parse_categories(cdata);
+ break;
+
+ case 'D':
+ datum = gt_lookup_datum_index(cdata, MYNAME);
+ break;
+
+ case 'I': /* event point */
+ wpt = waypt_new();
+ cdata += parse_coordinates(cdata, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ xasprintf(&wpt->shortname, "Event%d", ++event_ct);
+ while (isspace(*cdata)) cdata++;
+ if (*cdata == ';') {
+ int dyn;
+
+ cdata++;
+ wpt->icon_descr = gt_find_desc_from_icon_number(
+ atoi(cdata), PCX, &dyn);
+ wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+ }
+ waypt_add(wpt);
+ break;
+
+ case 'M':
+ grid = gt_lookup_grid_type(cdata, MYNAME);
+ break;
+
+ case 'P': /* proximity waypoint */
+ case 'W': /* normal waypoint */
+ wpt = parse_waypt(cdata);
+ prev = wpt;
+ if (wpt) {
+ if (mode == rtedata)
+ route_add_wpt(head, wpt);
+ else
+ waypt_add(wpt);
+ }
+ break;
+
+ case 'c': /* additional lines */
+ switch(*(cin+1)) {
+ int index;
+
+ case 'A': case 'B':
+ case 'C': case 'D':
+
+ index = WPT_cA_OFS + ((*(cin+1) - 'A') * 256);
+ parse_line(cdata, index, "|", wpt);
+ break;
+
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8':
+
+ index = WPT_c0_OFS + ((*(cin+1) - '0') * 256);
+ parse_line(cdata, index, ";", wpt);
+ break;
+
+ case 'L':
+ waypt_add_url(wpt, xstrdup(cdata), NULL);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 'N': /* track log header */
+ mode = trkdata;
+ head = route_head_alloc();
+ cdata = strchr(cdata, '-');
+ if (cdata) {
+ while (isspace(*cdata)) cdata++;
+ if (*cdata) {
+ char *s;
+ s = strrchr(cdata, ',');
+ if (s) {
+ *s = '\0';
+ s = strrchr(cdata, ',');
+ if (s) {
+ *s = '\0';
+ head->rte_name = xstrdup(cdata);
+ }
+ }
+ }
+ }
+ track_add_head(head);
+ break;
+
+ case 'R': /* route header */
+ mode = rtedata;
+ head = route_head_alloc();
+ cdata += 3; /*skip route number */
+ if (*cdata) head->rte_name = xstrdup(cdata);
+ route_add_head(head);
+ break;
+
+ case 'T':
+ wpt = parse_trkpt(cdata);
+ if (wpt) track_add_wpt(head, wpt);
+ break;
+
+ case 'V':
+ if (strcmp(cin, G7T_HEADER) != 0) {
+ fatal(MYNAME ": Invalid version or invalid file!\n");
+ }
+ gardown = 0;
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t g7towin_vecs = {
+ ff_type_file,
+ { ff_cap_read, ff_cap_read, ff_cap_read },
+ rd_init,
+ NULL,
+ rd_deinit,
+ NULL,
+ data_read,
+ NULL,
+ NULL,
+ g7towin_args,
+ CET_CHARSET_MS_ANSI, 0
+};
+
+#endif /* CSVFMTS_ENABLED */
--- /dev/null
+Grid Lat/Lon hddd°mm.mmm'\r
+Datum WGS 84\r
+\r
+Header Name Description Type Position Altitude Depth Proximity Temperature Display Mode Color Symbol Facility City State Country Date Modified Link Categories\r
+\r
+Waypoint 5058ROAD ROAD CROSSING User Waypoint N42 26.400 W71 07.257 54 m Symbol & Name Unknown Waypoint 02/06/2001 00:18:14 \r
+Waypoint 5066 User Waypoint N42 26.333 W71 07.158 45 m Symbol & Name Unknown Crossing 28/11/2001 21:05:28 \r
+Waypoint 5067 User Waypoint N42 26.354 W71 07.183 58 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 5096 User Waypoint N42 26.335 W71 06.970 45 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 5142 User Waypoint N42 26.634 W71 07.324 51 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5144SUMMIT User Waypoint N42 26.721 W71 07.372 62 m Symbol & Name Unknown Summit 28/11/2001 21:05:28 \r
+Waypoint 5148NANEPA User Waypoint N42 26.986 W71 07.341 120 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5150TANK WATER TANK User Waypoint N42 26.504 W71 07.302 67 m Symbol & Name Unknown Museum 02/06/2001 00:18:16 \r
+Waypoint 5156 User Waypoint N42 26.838 W71 07.288 128 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:58 \r
+Waypoint 5179DEAD Dead End User Waypoint N42 26.992 W71 07.159 117 m Symbol & Name Unknown Danger Area 02/06/2001 03:26:59 \r
+Waypoint 5224 User Waypoint N42 27.292 W71 07.507 97 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5229 User Waypoint N42 27.545 W71 07.501 83 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5236BRIDGE Bridge User Waypoint N42 27.388 W71 07.481 90 m Symbol & Name Unknown Bridge 02/06/2001 03:26:59 \r
+Waypoint 5237 User Waypoint N42 27.419 W71 07.470 83 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5239ROAD Road User Waypoint N42 27.557 W71 07.476 81 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:00 \r
+Waypoint 5252PURPLE User Waypoint N42 27.195 W71 07.274 78 m Symbol & Name Unknown Summit 07/11/2001 23:53:41 \r
+Waypoint 5254 User Waypoint N42 27.264 W71 07.261 67 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5258 User Waypoint N42 27.086 W71 07.306 75 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5264 User Waypoint N42 27.264 W71 07.241 65 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 526708 User Waypoint N42 27.466 W71 07.264 77 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 526750 User Waypoint N42 27.425 W71 07.220 75 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 5267OBSTAC User Waypoint N42 27.443 W71 07.192 74 m Symbol & Name Unknown Amusement Park 02/06/2001 03:27:00 \r
+Waypoint 527614 User Waypoint N42 27.395 W71 07.182 79 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 527631 User Waypoint N42 27.375 W71 07.163 79 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5278 User Waypoint N42 27.489 W71 07.150 68 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 5278ROAD Road User Waypoint N42 27.527 W71 07.141 67 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:01 \r
+Waypoint 5287WATER Reservoir User Waypoint N42 27.464 W71 07.050 68 m Symbol & Name Unknown Swimming Area 02/06/2001 03:27:01 \r
+Waypoint 5289 User Waypoint N42 27.563 W71 07.063 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:01 \r
+Waypoint 5299DEAD Dead End User Waypoint N42 27.578 W71 06.993 69 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:01 \r
+Waypoint 5374FIRE User Waypoint N42 27.851 W71 07.191 53 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5376 User Waypoint N42 27.939 W71 07.166 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 5376BRIDGE Bridge User Waypoint N42 27.945 W71 07.190 55 m Symbol & Name Unknown Bridge 02/06/2001 03:27:01 \r
+Waypoint 5376DEAD Dead End User Waypoint N42 27.929 W71 07.150 57 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:02 \r
+Waypoint 5376STREAM User Waypoint N42 27.955 W71 07.161 65 m Symbol & Name Unknown Bridge 07/11/2001 23:53:41 \r
+Waypoint 6006 User Waypoint N42 26.341 W71 06.869 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6006BLUE User Waypoint N42 26.316 W71 06.890 46 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6014MEADOW User Waypoint N42 26.205 W71 06.795 38 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6016 Bike Loop Connector User Waypoint N42 26.320 W71 06.846 43 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6029 User Waypoint N42 26.505 W71 06.795 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6042CROSS Crossing User Waypoint N42 26.128 W71 06.581 45 m Symbol & Name Unknown Crossing 02/06/2001 03:27:05 \r
+Waypoint 6053 User Waypoint N42 26.175 W71 06.546 50 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6066 User Waypoint N42 26.355 W71 06.452 26 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6067 User Waypoint N42 26.386 W71 06.457 34 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6071 User Waypoint N42 26.086 W71 06.354 30 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6073 User Waypoint N42 25.998 W71 06.397 15 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6077LOGS Log Crossing User Waypoint N42 26.370 W71 06.395 32 m Symbol & Name Unknown Amusement Park 02/06/2001 00:18:16 \r
+Waypoint 6084 User Waypoint N42 26.240 W71 06.288 38 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6121DEAD Dead End User Waypoint N42 26.586 W71 06.762 56 m Symbol & Name Unknown Danger Area 02/06/2001 03:26:57 \r
+Waypoint 6130 User Waypoint N42 26.532 W71 06.660 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6131 User Waypoint N42 26.579 W71 06.688 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:58 \r
+Waypoint 6153 User Waypoint N42 26.686 W71 06.535 63 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6155DEAD Dead End User Waypoint N42 26.808 W71 06.529 61 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:04 \r
+Waypoint 6171 User Waypoint N42 26.615 W71 06.380 55 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6176 User Waypoint N42 26.868 W71 06.399 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6177 User Waypoint N42 26.907 W71 06.371 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6181CROSS Crossing User Waypoint N42 26.580 W71 06.354 53 m Symbol & Name Unknown Crossing 02/06/2001 03:27:05 \r
+Waypoint 6272 User Waypoint N42 27.205 W71 06.409 70 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6278 User Waypoint N42 27.498 W71 06.408 70 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6280 User Waypoint N42 27.086 W71 06.326 58 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6283 User Waypoint N42 27.231 W71 06.314 67 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6289 User Waypoint N42 27.599 W71 06.372 73 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6297 User Waypoint N42 27.457 W71 06.309 73 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6328 User Waypoint N42 28.027 W71 06.816 54 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 6353DEAD Dead End User Waypoint N42 27.766 W71 06.601 47 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:03 \r
+Waypoint 6354 User Waypoint N42 27.852 W71 06.593 44 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:03 \r
+Waypoint 635722 User Waypoint N42 27.988 W71 06.606 49 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 635783 User Waypoint N42 27.993 W71 06.566 49 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 6373 User Waypoint N42 27.810 W71 06.429 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:03 \r
+Waypoint 6634 User Waypoint N42 24.063 W71 06.616 4 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6979 User Waypoint N42 25.957 W71 06.393 13 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6997 User Waypoint N42 25.862 W71 06.475 34 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint BEAR HILL BEAR HILL TOWER User Waypoint N42 27.941 W71 06.443 88 m Symbol & Name Unknown Tall Tower 02/06/2001 03:27:03 \r
+Waypoint BELLEVUE User Waypoint N42 25.857 W71 06.459 23 m Symbol & Name Unknown Parking Area 02/06/2001 00:18:15 \r
+Waypoint DARKHOLLPO Dark Hollow Pond User Waypoint N42 27.511 W71 06.220 Symbol & Name Unknown Fishing Area 16/07/2005 20:53:40 \r
+Waypoint GATE14 Gate 14 User Waypoint N42 27.072 W71 07.598 111 m Symbol & Name Unknown Truck Stop 02/06/2001 03:26:59 \r
+Waypoint GATE16 Gate 16 User Waypoint N42 27.510 W71 07.326 78 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:00 \r
+Waypoint GATE17 Gate 17 User Waypoint N42 27.562 W71 07.156 66 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:01 \r
+Waypoint GATE19 Gate 19 User Waypoint N42 27.981 W71 07.156 57 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:02 \r
+Waypoint GATE21 Gate 21 User Waypoint N42 28.119 W71 06.463 49 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:03 \r
+Waypoint GATE24 Gate 24 User Waypoint N42 27.403 W71 06.180 81 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:03 \r
+Waypoint GATE5 Gate 5 User Waypoint N42 25.851 W71 06.463 22 m Symbol & Name Unknown Truck Stop 28/11/2001 21:05:28 \r
+Waypoint GATE6 User Waypoint N42 25.874 W71 06.556 27 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint PANTHRCAVE User Waypoint N42 26.099 W71 06.598 45 m Symbol & Name Unknown Tunnel 07/11/2001 23:53:41 \r
+Waypoint SHEEPFOLD Sheepfold Parking Lot User Waypoint N42 27.205 W71 06.408 70 m Symbol & Name Unknown Parking Area 02/06/2001 00:18:13 \r
+Waypoint SOAPBOX Soap Box Derby Track User Waypoint N42 27.357 W71 06.451 64 m Symbol & Name Unknown Cemetery 02/06/2001 03:27:04 \r
+\r
+\r
+Header Name Length Course Waypoints Link\r
+\r
+Route BELLEVUE 11.2 km 0° true 46 waypoints \r
+\r
+Header Waypoint Name Distance Leg Length Course\r
+\r
+Route Waypoint BELLEVUE 0 m\r
+Route Waypoint GATE6 136 m 136 m 284° true\r
+Route Waypoint PANTHRCAVE 556 m 420 m 352° true\r
+Route Waypoint 6014MEADOW 891 m 334 m 306° true\r
+Route Waypoint 6006 1.2 km 271 m 338° true\r
+Route Waypoint 6006BLUE 1.2 km 55 m 211° true\r
+Route Waypoint 5096 1.3 km 116 m 288° true\r
+Route Waypoint 5066 1.6 km 257 m 269° true\r
+Route Waypoint 5067 1.6 km 52 m 319° true\r
+Route Waypoint 5058ROAD 1.8 km 133 m 310° true\r
+Route Waypoint 5150TANK 2.0 km 203 m 342° true\r
+Route Waypoint 5142 2.2 km 244 m 353° true\r
+Route Waypoint 5144SUMMIT 2.4 km 175 m 338° true\r
+Route Waypoint 5156 2.6 km 245 m 28° true\r
+Route Waypoint 5148NANEPA 2.9 km 284 m 345° true\r
+Route Waypoint 5258 3.1 km 193 m 14° true\r
+Route Waypoint 5252PURPLE 3.3 km 207 m 12° true\r
+Route Waypoint 527631 3.7 km 367 m 25° true\r
+Route Waypoint 527614 3.7 km 46 m 325° true\r
+Route Waypoint 5267OBSTAC 3.8 km 90 m 351° true\r
+Route Waypoint 5278 3.9 km 103 m 35° true\r
+Route Waypoint 5289 4.1 km 181 m 41° true\r
+Route Waypoint 5374FIRE 4.7 km 563 m 342° true\r
+Route Waypoint 5376 4.8 km 167 m 12° true\r
+Route Waypoint 5376STREAM 4.9 km 30 m 11° true\r
+Route Waypoint 6328 5.4 km 491 m 74° true\r
+Route Waypoint 635722 5.7 km 297 m 104° true\r
+Route Waypoint 635783 5.7 km 55 m 79° true\r
+Route Waypoint 6373 6.1 km 389 m 151° true\r
+Route Waypoint BEAR HILL 6.3 km 245 m 355° true\r
+Route Waypoint 6289 7.0 km 642 m 171° true\r
+Route Waypoint 6297 7.3 km 278 m 162° true\r
+Route Waypoint 6283 7.7 km 420 m 181° true\r
+Route Waypoint 6280 8.0 km 269 m 184° true\r
+Route Waypoint 6177 8.3 km 338 m 190° true\r
+Route Waypoint 6176 8.4 km 81 m 208° true\r
+Route Waypoint 6153 8.8 km 385 m 209° true\r
+Route Waypoint 6171 9.0 km 249 m 122° true\r
+Route Waypoint 6131 9.4 km 428 m 261° true\r
+Route Waypoint 6130 9.5 km 95 m 156° true\r
+Route Waypoint 6029 9.7 km 191 m 255° true\r
+Route Waypoint 6006 10.0 km 321 m 198° true\r
+Route Waypoint 6014MEADOW 10.3 km 271 m 158° true\r
+Route Waypoint PANTHRCAVE 10.7 km 334 m 126° true\r
+Route Waypoint GATE6 11.1 km 420 m 172° true\r
+Route Waypoint BELLEVUE 11.2 km 136 m 104° true\r
+\r
+\r
+Header Name Start Time Elapsed Time Length Average Speed Link\r
+\r
+Track - Trk from .gpx file 25/05/2002 17:06:21 1:59:36 7.7 km 4 kph \r
+\r
+Header Position Time Altitude Depth Leg Length Leg Time Leg Speed Leg Course\r
+\r
+Trackpoint N30 03.731 W91 36.620 25/05/2002 17:06:21 1 m 0.0 m\r
+Trackpoint N30 03.767 W91 36.633 25/05/2002 17:09:55 0.0 m 70 m 0:03:34 1.2 kph 343° true\r
+Trackpoint N30 03.762 W91 36.495 25/05/2002 17:12:00 0.0 m 222 m 0:02:05 6 kph 92° true\r
+Trackpoint N30 03.740 W91 36.442 25/05/2002 17:12:48 0.0 m 94 m 0:00:48 7 kph 116° true\r
+Trackpoint N30 03.692 W91 36.316 25/05/2002 17:14:41 0.0 m 221 m 0:01:53 7 kph 114° true\r
+Trackpoint N30 03.587 W91 35.963 25/05/2002 17:17:16 0.0 m 599 m 0:02:35 14 kph 109° true\r
+Trackpoint N30 03.468 W91 35.800 25/05/2002 17:17:46 0.0 m 342 m 0:00:30 41 kph 130° true\r
+Trackpoint N30 03.323 W91 35.693 25/05/2002 17:18:20 0.0 m 319 m 0:00:34 34 kph 147° true\r
+Trackpoint N30 03.233 W91 35.556 25/05/2002 17:19:01 0.0 m 276 m 0:00:41 24 kph 127° true\r
+Trackpoint N30 02.984 W91 35.384 25/05/2002 17:20:46 0.0 m 538 m 0:01:45 18 kph 149° true\r
+Trackpoint N30 02.941 W91 35.392 25/05/2002 17:21:10 0.0 m 81 m 0:00:24 12 kph 189° true\r
+Trackpoint N30 02.928 W91 35.575 25/05/2002 17:21:51 0.0 m 295 m 0:00:41 26 kph 265° true\r
+Trackpoint N30 02.774 W91 35.786 25/05/2002 17:22:35 0.0 m 443 m 0:00:44 36 kph 230° true\r
+Trackpoint N30 02.731 W91 35.922 25/05/2002 17:23:08 0.0 m 233 m 0:00:33 25 kph 250° true\r
+Trackpoint N30 02.838 W91 36.015 25/05/2002 18:04:23 0.0 m 248 m 0:41:15 0.4 kph 323° true\r
+Trackpoint N30 02.820 W91 35.977 25/05/2002 18:06:04 2 m 0.0 m 70 m 0:01:41 2 kph 119° true\r
+Trackpoint N30 02.786 W91 35.967 25/05/2002 18:07:06 0.0 m 65 m 0:01:02 4 kph 166° true\r
+Trackpoint N30 02.772 W91 35.936 25/05/2002 18:08:18 1 m 0.0 m 56 m 0:01:12 3 kph 117° true\r
+Trackpoint N30 02.782 W91 35.863 25/05/2002 18:10:20 0.0 m 119 m 0:02:02 4 kph 81° true\r
+Trackpoint N30 02.781 W91 35.829 25/05/2002 18:11:09 0.0 m 55 m 0:00:49 4 kph 92° true\r
+Trackpoint N30 02.807 W91 35.779 25/05/2002 18:12:18 0.0 m 94 m 0:01:09 5 kph 59° true\r
+Trackpoint N30 02.847 W91 35.711 25/05/2002 18:14:22 0.0 m 132 m 0:02:04 4 kph 56° true\r
+Trackpoint N30 02.868 W91 35.685 25/05/2002 18:15:04 2 m 0.0 m 57 m 0:00:42 5 kph 47° true\r
+Trackpoint N30 02.895 W91 35.644 25/05/2002 18:16:14 1 m 0.0 m 83 m 0:01:10 4 kph 53° true\r
+Trackpoint N30 02.921 W91 35.627 25/05/2002 18:17:01 1 m 0.0 m 55 m 0:00:47 4 kph 30° true\r
+Trackpoint N30 02.961 W91 35.630 25/05/2002 18:18:07 0.0 m 74 m 0:01:06 4 kph 356° true\r
+Trackpoint N30 03.019 W91 35.638 25/05/2002 18:19:51 2 m 0.0 m 108 m 0:01:44 4 kph 353° true\r
+Trackpoint N30 03.047 W91 35.646 25/05/2002 18:20:39 0.0 m 53 m 0:00:48 4 kph 346° true\r
+Trackpoint N30 03.074 W91 35.661 25/05/2002 18:21:24 0.0 m 56 m 0:00:45 4 kph 334° true\r
+Trackpoint N30 03.108 W91 35.661 25/05/2002 18:22:17 0.0 m 63 m 0:00:53 4 kph 0° true\r
+Trackpoint N30 03.133 W91 35.679 25/05/2002 18:23:18 0.0 m 55 m 0:01:01 3 kph 328° true\r
+Trackpoint N30 03.181 W91 35.680 25/05/2002 18:24:37 0.0 m 89 m 0:01:19 4 kph 359° true\r
+Trackpoint N30 03.292 W91 35.711 25/05/2002 18:28:13 6 m 0.0 m 212 m 0:03:36 4 kph 346° true\r
+Trackpoint N30 03.224 W91 35.695 25/05/2002 18:31:36 2 m 0.0 m 129 m 0:03:23 2 kph 168° true\r
+Trackpoint N30 03.191 W91 35.686 25/05/2002 18:32:56 0.0 m 63 m 0:01:20 3 kph 167° true\r
+Trackpoint N30 03.158 W91 35.689 25/05/2002 18:34:02 0.0 m 61 m 0:01:06 3 kph 184° true\r
+Trackpoint N30 03.147 W91 35.725 25/05/2002 18:36:03 0.0 m 61 m 0:02:01 2 kph 251° true\r
+Trackpoint N30 03.149 W91 35.757 25/05/2002 18:36:48 0.0 m 52 m 0:00:45 4 kph 274° true\r
+Trackpoint N30 03.159 W91 35.806 25/05/2002 18:37:52 1 m 0.0 m 81 m 0:01:04 5 kph 283° true\r
+Trackpoint N30 03.188 W91 35.870 25/05/2002 18:39:18 0.0 m 116 m 0:01:26 5 kph 298° true\r
+Trackpoint N30 03.217 W91 35.877 25/05/2002 18:40:15 0.0 m 55 m 0:00:57 3 kph 348° true\r
+Trackpoint N30 03.238 W91 35.865 25/05/2002 18:41:25 6 m 0.0 m 43 m 0:01:10 2 kph 26° true\r
+Trackpoint N30 03.217 W91 35.884 25/05/2002 18:42:37 0.0 m 49 m 0:01:12 2 kph 218° true\r
+Trackpoint N30 03.192 W91 35.874 25/05/2002 18:44:01 0.0 m 49 m 0:01:24 2 kph 161° true\r
+Trackpoint N30 03.169 W91 35.850 25/05/2002 18:45:53 0.0 m 57 m 0:01:52 2 kph 138° true\r
+Trackpoint N30 03.154 W91 35.815 25/05/2002 18:46:54 0.0 m 63 m 0:01:01 4 kph 116° true\r
+Trackpoint N30 03.140 W91 35.785 25/05/2002 18:47:42 0.0 m 55 m 0:00:48 4 kph 118° true\r
+Trackpoint N30 03.135 W91 35.740 25/05/2002 18:48:41 0.0 m 73 m 0:00:59 4 kph 97° true\r
+Trackpoint N30 03.133 W91 35.700 25/05/2002 18:49:52 0.0 m 64 m 0:01:11 3 kph 93° true\r
+Trackpoint N30 03.113 W91 35.681 25/05/2002 18:50:49 0.0 m 48 m 0:00:57 3 kph 141° true\r
+Trackpoint N30 03.063 W91 35.663 25/05/2002 18:52:14 0.0 m 97 m 0:01:25 4 kph 163° true\r
+Trackpoint N30 03.034 W91 35.653 25/05/2002 18:52:56 0.0 m 56 m 0:00:42 5 kph 163° true\r
+Trackpoint N30 03.011 W91 35.645 25/05/2002 18:53:38 0.0 m 45 m 0:00:42 4 kph 163° true\r
+Trackpoint N30 02.946 W91 35.622 25/05/2002 18:55:11 0.0 m 126 m 0:01:33 5 kph 163° true\r
+Trackpoint N30 02.907 W91 35.654 25/05/2002 18:56:32 0.0 m 89 m 0:01:21 4 kph 215° true\r
+Trackpoint N30 02.885 W91 35.684 25/05/2002 18:57:24 0.0 m 63 m 0:00:52 4 kph 230° true\r
+Trackpoint N30 02.850 W91 35.726 25/05/2002 18:58:40 7 m 0.0 m 94 m 0:01:16 4 kph 226° true\r
+Trackpoint N30 02.824 W91 35.759 25/05/2002 18:59:28 0.0 m 72 m 0:00:48 5 kph 228° true\r
+Trackpoint N30 02.798 W91 35.795 25/05/2002 19:00:22 0.0 m 75 m 0:00:54 5 kph 230° true\r
+Trackpoint N30 02.784 W91 35.858 25/05/2002 19:01:41 0.0 m 105 m 0:01:19 5 kph 256° true\r
+Trackpoint N30 02.774 W91 35.907 25/05/2002 19:02:48 0.0 m 81 m 0:01:07 4 kph 257° true\r
+Trackpoint N30 02.779 W91 35.937 25/05/2002 19:03:43 0.0 m 49 m 0:00:55 3 kph 281° true\r
+Trackpoint N30 02.807 W91 35.956 25/05/2002 19:04:49 0.0 m 60 m 0:01:06 3 kph 330° true\r
+Trackpoint N30 02.828 W91 35.979 25/05/2002 19:05:57 0.0 m 54 m 0:01:08 3 kph 317° true\r